import dayjs from "dayjs";
import { Tool } from "./tool";
import PD from ".";
import type { WxUserPermission } from "./wx-types";
const wxlogger = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : null;

export namespace WxHelp {
	/**
	 * 校验是否具有某个权限
	 * @param {string} 要校验的权限，如： scope.userLocation
	 * @return {boolean} 校验结果
	 */
	export function getPermission(type: WxUserPermission): Promise<boolean | undefined> {
		return new Promise((r) => {
			PD.UniHelp.getSetting().then(res => {
				r(res.authSetting[type as 'scope.userLocation']);
			}).catch(() => {
				r(false);
			});
		});
	}

	/**
	 * 验证微信某个api是否满足基础库要求
	 * @return {boolean}
	 */
	export function checkWxApiVersion(version: string): boolean {
		return Tool.versionCompare(PD.UniHelp.getMiniAppBaseInfo().SDKVersion, version) >= 0;
	};

	/**
	 * 微信埋点上报
	 * @param key 事件名称
	 * @param params 上报时需要携带的参数
	 */
	export function wxReport(key: string, params?: unknown) {
		const p = params ? {
			time: dayjs().format('YYYY-MM-DD HH:mm:ss'),
			...params
		} : {
			time: dayjs().format('YYYY-MM-DD HH:mm:ss'),
		};
		wx.reportEvent(key, p);
	}
	/**
	 * 上报实时日志到微信小程序后台
	 */
	export namespace WxLogger {
		export function error(...args: unknown[]) {
			if (!wxlogger || !wxlogger.error) return;
			if (import.meta.env.MODE !== 'production') return;
			wxlogger.error.apply(wxlogger, [...args]);
		}
		export function info(...args: unknown[]) {
			if (!wxlogger || !wxlogger.info) return;
			if (import.meta.env.MODE !== 'production') return;
			wxlogger.info.apply(wxlogger, [...args]);
		}
		export function warn(...args: unknown[]) {
			if (!wxlogger || !wxlogger.warn) return;
			if (import.meta.env.MODE !== 'production') return;
			wxlogger.warn.apply(wxlogger, [...args]);
		}
		/**
		 * 代码异常上报
		 */
		export function codeError(args : unknown) {
			error('代码异常', args);
		}
		/**
		 * 接口异常上报
		 */
		export function apiError(args : unknown) {
			error('api调用异常', args);
		}
		/**
		 * 日志信息
		 */
		export function log(args : unknown) {
			info('日志信息', args);
		}
	}
}
